package sak.samples.actionbar;

import android.app.ListFragment;
import android.graphics.Color;
import android.os.Bundle;
import android.util.SparseBooleanArray;
import android.view.ActionMode;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.widget.AbsListView;
import android.widget.AbsListView.MultiChoiceModeListener;
import android.widget.ArrayAdapter;
import android.widget.Toast;

public class MyListFragment extends ListFragment {

    private static String[] mItems = {
        "01: 北海道", "02: 青森県", "03: 岩手県", "04: 宮城県", "05: 秋田県",
        "06: 山形県", "07: 福島県", "08: 茨城県", "09: 栃木県", "10: 群馬県",
        "11: 埼玉県", "12: 千葉県", "13: 東京都", "14: 神奈川県", "15: 新潟県",
        "16: 富山県", "17: 石川県", "18: 福井県", "19: 山梨県", "20: 長野県",
        "21: 岐阜県", "22: 静岡県", "23: 愛知県", "24: 三重県", "25: 滋賀県",
        "26: 京都府", "27: 大阪府", "28: 兵庫県", "29: 奈良県", "30: 和歌山県",
        "31: 鳥取県", "32: 島根県", "33: 岡山県", "34: 広島県", "35: 山口県",
        "36: 徳島県", "37: 香川県", "38: 愛媛県", "39: 高知県", "40: 福岡県",
        "41: 佐賀県", "42: 長崎県", "43: 熊本県", "44: 大分県", "45: 宮崎県",
        "46: 鹿児島県", "47: 沖縄県" };
    
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
    
        setHasOptionsMenu(true);
    }
    
    @Override
    public void onActivityCreated(Bundle savedInstanceState) {
        super.onActivityCreated(savedInstanceState);
        
        setListAdapter(new ArrayAdapter<String>(
                getActivity(),
                android.R.layout.simple_list_item_checked, 
                mItems));

        getListView().setChoiceMode(AbsListView.CHOICE_MODE_MULTIPLE_MODAL);
        
        getListView().setMultiChoiceModeListener(new MultiChoiceModeListener() {
            
            @Override
            public boolean onPrepareActionMode(ActionMode mode, Menu menu) {
                MenuInflater inflater = getActivity().getMenuInflater();
                inflater.inflate(R.menu.list_selection, menu);
                return true;
            }
            
            @Override
            public void onDestroyActionMode(ActionMode mode) {}
            
            @Override
            public boolean onCreateActionMode(ActionMode mode, Menu menu) { return true; }
            
            @Override
            public boolean onActionItemClicked(ActionMode mode, MenuItem item) {
                int id = item.getItemId();
                if (id == R.id.action_nine) {
                    showToast("アクション「９」が選択されました");
                } else if (id == R.id.action_zero) {
                    showToast("アクション「０」が選択されました");
                } else {
                    return false;
                }
                mode.finish();
                return true;
            }
            
            @Override
            public void onItemCheckedStateChanged(ActionMode mode, int position, long id, boolean checked) {
                int count = getListView().getCheckedItemCount();
                mode.setTitle(String.format("%d 件選択中", count));
            }
            
            private void showToast(String action) {
                SparseBooleanArray checked = getListView().getCheckedItemPositions();
                int count = checked.size();
                StringBuilder sb = new StringBuilder();
                sb.append(action + "\n");
                sb.append(count + " 個選択しました。\n");
                sb.append("---------------------\n");
                for (int i=0; i<count; i++) {
                    int key = checked.keyAt(i);
                    sb.append(mItems[key]);
                    sb.append("\n");
                }
                String text = new String(sb);
                Toast.makeText(getActivity(), text, Toast.LENGTH_SHORT).show();
            }
        });
    }
    
    @Override
    public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
        menu.clear();
        inflater.inflate(R.menu.list, menu);
    }
    
    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        int id = item.getItemId();
        if (id == R.id.action_one) {
            goDetail(1, Color.RED);
        } else if (id == R.id.action_two) {
            goDetail(2, Color.GREEN);
        } else if (id == R.id.action_three) {
            goDetail(3, Color.BLUE);
        } else if (id == R.id.action_four) {
            goDetail(4, Color.MAGENTA);
        } else if (id == R.id.action_five) {
            goDetail(5, Color.YELLOW);
        } else {
            return false;
        }
        return true;
    }
    
    private void goDetail(int num, int color) {
        ((Main)getActivity()).goDetail(num, color);
    }
}
